<?php
/**
 * rootSelectorメソッドのテスト
 * 
 * @since 2012/02/25
 */
class TestofRootSelector extends UnitTestCase {
	public function __construct () {
	}
	
	// rootオブジェクトの保持
	public function TestofRoot() {
		$root = YuTori::rootSelector();
		$this->assertIdentical($root->getName(), 'Root', 'Rootオブジェクトの名称が"Root"');
		$this->assertIdentical($root->getType(), YuTori::TYPE_NULL, 'RootオブジェクトがNull型');
	}

	// グローバルセレクタのthis
	public function TestofThis() {
		$root = YuTori::rootSelector('this');
		$this->assertIdentical($root->getName(), 'Root', '使用中のものが何もない時はRootを返す');

		$test = $root->add (YuTori::factory(array($this, 'toCall'), 'test', array(), YuTori::TYPE_CALLABLE));
		$test->add ('test2', 'child');

		$this->assertTrue(YuTori::rootSelector('test')->call(true), 'toCallがtrueを返していない');
	}
	
	// 補助ルーチン
	public function toCall ($call = false) {
		// publicだと目的の試験以外でも呼び出されてしまうので、引数なしの場合は何もせず戻す
		if ($call === false) return false;

		$root = YuTori::rootSelector('this');
		$this->assertIdentical($root->getName(), 'test', 'thisセレクタで使用中のオブジェクトを取得できるか');

		$child = YuTori::rootSelector('this.child');
		$this->assertIdentical($child->getName(), 'child', 'thisセレクタに続けて子オブジェクトを取得できるか:名称判定');
		$this->assertIdentical($child->get(), 'test2', 'thisセレクタに続けて子オブジェクトを取得できるか:get値判定');
		return true;
	}

	// 引数にYuToriObject
	public function TestofYuToriObject() {
		$yo = YuTori::newObject ('test', 'testName');
		$y = YuTori::rootSelector($yo);
		$this->assertIdentical($res = $y->getType() , YuTori::TYPE_SCALAR, '型判定');
		$this->assertIdentical($res = $y->getName() , 'testName', '名称判定');
		$this->assertIdentical($res = $y->getSelector() , '', 'セレクタ判定');
		$this->assertIdentical($res = $y->get() , 'test', 'get値判定');
		$this->assertIdentical($res = $y->call() , 'test', 'call値判定');
	}

}